Rorg_tut09
a) was beeinflusst die Veränderung des Registerinhalts in einem Befehl?
direkten Einfluss:
indirekten Einflus:
keinen Einfluss:
b) welche Steuersignale beeinflussen das Beschreiben des Hauptspeicher (RAM – Random Access Memory)
Andere Steuersignale nicht, denn diese beschreiben nur Veränderungen in den Prozessorregistern.
a) welche Steuersignale dürfen niemals (bei keinem Befehl) einen nicht-definierten (beliebigen) Wert annehmen?
b) welche Steuersignale sind egal, wenn RegWrite = 0?
c) welche Funktionalität (oder welcher Befehl) passiert (wohl), wenn RegWrite = 1, MemRead = 1, MemToReg = 1 ist?
naheliegender Befehl: load word (lw)
Berechnung der Speicheradresse nicht vorgegeben (könnte beliebig sein)
ADDI:
a) BGTZ zum Datenpfad hinzufügen.
Schritt 1: Verhalten definieren.
BGTZ $rs, Label (Label = PC + 4 + imm4 )
PC = PC + 4 + ( RS > 0 ? immediate 4 : 0) // a ? b : c === if a then b else c
Schritt 2:
Schaltnetz:
PC = PC + 4 + X -> 2-mal Addition
X = ( RS > 0 ? immediate * 4 : 0)
PC = ( RS > 0 ? PC + 4 + immediate * 4 : PC + 4 ) => nur noch 2 Additionen
Nebenbemerkung: $rs > 0 <==> $rs[31] = 0 (d.h. $rs ≥ 0) und $rs ≠ 0
PC ---+---+
| + |--+-----------------+---+
4 ----+---+ | |MUX|----- PC
| +--+---+
| | |
+------+---+ | |
| + |---+ |
imm --- (<< 2) -----+---+ |
|
$rs[31] -----------------o+---+ |
| & |--+
$rs --------(NOR32)------o+---+
Schritt 3: Schaltung in Datenpfad einfügen und möglichst viele Komponenten wiederverwenden
Zero-Signal gibt an, ob das ALU-Ergebnis = 0 ist! NOR32 kann durch zero-Signal ersetzt werden.
Addierer und Multiplexer sind schon vorhanden, Befehle und Operanden (Register) laden ist auch vollständig vorhanden.
=> $rs[31] können wir durch das oberste Bit des ALU-Ergebnisses (oder des oberen ALU-Eingangs) erhalten
Zusätzlich brauchen wir ein OR-Gatter zwischen dem AND und dem Multiplexer, um die Möglichkeit für andere Branch-Befehle offen zu halten.
Schritt 4: ein Steuersignal (und gegebenenfalls ein zusätzlicher Multiplexer) hinzufügen, um unseren Befehl zu de-/aktiveren
bgtz-Steuersignal ausgehend von der Control Unit bis zu dem neu eingefügten AND-Gatter einzeichnen. Dieses schaltet das UND-Gatter an/aus und damit auch den Befehl.b) Steuersignale setzen, um den Befehl auszuführen.